//============================================================================================
/**
 * @file	field_kairiki_eff.c
 * @brief	かいりき使用エフェクト（連れ歩き用）
 * @author	Nozomu Saito
 * @date	08.12.18
 *
 * モジュール名：FldKairikiEff_
 */
//============================================================================================

#define EFF_WAIT	(10)
#define BIG_SCALE	(0.5)
#define BIG_FRAME	(10)

#include "field_kairiki_eff.h"

typedef struct FLD_KAIRIKI_EFF_tag
{
	u16 Wait;
	u16 Frame;
}FLD_KAIRIKI_EFF;

static BOOL KairikiEvt( GMEVENT_CONTROL *event );

//--------------------------------------------------------------
/**
 * 	かいりきエフェクト開始
 * @param	fsys		フィールドシステムポインタ
 *
 * @retval	none
 */
//--------------------------------------------------------------
BOOL FldKairikieff_Set(FIELDSYS_WORK *fsys)
{
	//イベントコール
	FLD_KAIRIKI_EFF *work;
	work = sys_AllocMemoryLo(HEAPID_WORLD, sizeof(FLD_KAIRIKI_EFF));
	work->Wait = 0;
	work->Frame = 0;
	FieldEvent_Call( fsys->event, KairikiEvt, work );

	return 1;
}

//--------------------------------------------------------------
/**
 * 	かいりきエフェクトイベント
 * @param	event		イベントポインタ
 *
 * @retval	BOOL		TRUE:イベント終了		FALSE:イベント継続
 */
//--------------------------------------------------------------
static BOOL KairikiEvt( GMEVENT_CONTROL *event )
{
	FIELDSYS_WORK * fsys = FieldEvent_GetFieldSysWork(event);
	int *seq = FieldEvent_GetSeqWork(event);
	FLD_KAIRIKI_EFF *work = FieldEvent_GetSpecialWork( event );

	switch(*seq){
	case 0:	//ポケのスケールを大きくする
		{
			BLACT_WORK_PTR	act;
			VecFx32 scale = {FX32_ONE,FX32_ONE,FX32_ONE};

			work->Frame++;
			scale.x = FX32_ONE + (BIG_SCALE * FX32_ONE * work->Frame / BIG_FRAME);
			scale.y = FX32_ONE + (BIG_SCALE * FX32_ONE * work->Frame / BIG_FRAME);
			//連れ歩きポケモンアクター取得
			act = FldOBJ_GetPairPokeAct(fsys->fldobjsys);
			//連れ歩きポケモンを大きくする
			BLACT_ScaleSet(act, &scale);

			if (work->Frame >= BIG_FRAME){	//規定サイズまで達した？
				work->Frame = 0;
				work->Wait = 0;
				(*seq)++;
			}
		}
		break;
	case 1:	//拡大したままウェイト
		work->Wait++;
		if (work->Wait >= EFF_WAIT){		//ウェイトこなした？
			(*seq)++;
		}
		break;
	case 2:	//ポケのスケールを元に戻す
		{
			BLACT_WORK_PTR	act;
			VecFx32 scale = {FX32_ONE,FX32_ONE,FX32_ONE};

			work->Frame++;

			if ( work->Frame >= BIG_FRAME){ //元に戻った？
				(*seq)++;
			}else{
				scale.x = FX32_ONE + (BIG_SCALE * FX32_ONE * (BIG_FRAME-work->Frame) / BIG_FRAME);
				scale.y = FX32_ONE + (BIG_SCALE * FX32_ONE * (BIG_FRAME-work->Frame) / BIG_FRAME);
			}
			//連れ歩きポケモンアクター取得
			act = FldOBJ_GetPairPokeAct(fsys->fldobjsys);
			//連れ歩きポケモンを小さくする
			BLACT_ScaleSet(act, &scale);
		}
		break;
	case 3:
		//終了
		sys_FreeMemoryEz(work);
		return TRUE;
	}
	return FALSE;
}




